/* -*-jde-*- */
package app.alumnoe.cv;

import app.alumnoe.cv.beans.ExperienciaProfesional;
import app.conexion.Conexion;
import app.conexion.ConexionException;
import app.util.Fecha;
import app.util.appException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Bean Experiencias profesionales Cada una de las experiencias profesionales
 * que lleva el alumno para un cv
 *
 * @author Victor Miguel Peralta Santa Anna
 * @since Diciembre 2011
 * @version 0.1
 */
public class ExperienciasProfesionales {

    private LinkedList<ExperienciaProfesional> experienciasprofesionales = new LinkedList<ExperienciaProfesional>();

    /**
     * Se obliga el uso a métodos estáticos.
     */
    public ExperienciasProfesionales(int nIdCV) throws appException {
        getExperienciasProfesionalesBase(nIdCV);
    }

    /**
     * Método que inicializa la lista con los experiencias profesionales
     * existentes en la base de datos para un usuario
     *
     * @throws appException
     */
    public void getExperienciasProfesionalesBase(int nIdCV) throws appException {
        try {

            Conexion con = new Conexion();

            String query = "select * from experienciaprofesional where nidcv = " + nIdCV + ";";

            ResultSet r = con.exec(query);


            while (r.next()) {
                int idi = r.getInt("nidexpprofesional");
                int idc = r.getInt("nidcv");
                String sid = r.getString("sempresa");
                String sgi = r.getString("sgiro");
                String spu = r.getString("spuesto");
                Fecha f1 = new Fecha(r.getString("dfechaingreso"));
                String fechafin = r.getString("dfechasalida");
                Fecha f2 = fechafin == null ? null : new Fecha(fechafin);
                boolean bcom = r.getBoolean("bpuestoactual");
                String sfun = r.getString("sfunciones");

                experienciasprofesionales.add(
                        new ExperienciaProfesional(idi, idc, sid, sgi, spu, f1, f2, bcom, sfun));
            }

            con.close();
        } catch (SQLException ex) {
            System.err.println(ex);
            Logger.getLogger(Idiomas.class.getName()).log(Level.SEVERE, null, ex);
            throw new appException("No se pueden recuperar las experiencias profesionales de la base de datos");
        } catch (ConexionException ex) {
            System.err.println(ex);
            Logger.getLogger(Idiomas.class.getName()).log(Level.SEVERE, null, ex);
            throw new appException("No se pueden recuperar las experiencias profesionales de la base de datos");
        }

    }

    /**
     * Recuperamos la lista de experiencias profesionales de acuerdo al cv
     * asignado
     *
     * @return
     */
    public LinkedList<ExperienciaProfesional> getExperienciasprofesionales() {
        return experienciasprofesionales;
    }

    /**
     * Salvamos la lista de experiencias en la base de datos.
     *
     * @throws appException
     */
    public void saveAll() throws appException {
        for (ExperienciaProfesional expp : experienciasprofesionales) {
            expp.save();
        }
    }

    /**
     * Conexiones de prueba a la base de datos
     *
     * @param args
     * @throws ConexionException
     * @throws SQLException
     * @throws appException
     */
    public static void main(String args[]) throws ConexionException, SQLException, appException {


        ExperienciasProfesionales ep = new ExperienciasProfesionales(1);

        LinkedList<ExperienciaProfesional> expprof = ep.getExperienciasprofesionales();


        System.out.println(expprof);

    }
}
